package com.order.www;

/**
 * Creared with IntelliJ IDEA.
 * Description:一个机器人在m×n大小的地图的左上角（起点）。
 * 机器人每次可以向下或向右移动。机器人要到达地图的右下角（终点）。
 * 可以有多少种不同的路径从起点走到终点？
 *
 * 备注：m和n小于等于100,并保证计算结果在int范围内
 * User:yxd
 * Date:2022-03-23
 * Time:22:25
 */
public class Dp6 {
    public int uniquePaths (int m, int n) {
        // write code here
        if(m <= 0 || n <= 0){
            return -1;
        }
        int[][] dp = new int[m][n];
        //状态定义：F(i,j)从起点到此点的所有路径
        //状态转移方程：F(i,j) = F(i - 1,j) + F(i,j - 1)
        //初值：第一行 F(0,j) = 1 第一列 F(i,0) = 1
        for(int i = 0;i < n;i ++){
            dp[0][i] = 1;

        }
        for(int i = 0;i < m;i ++){
            dp[i][0] = 1;
        }
        for(int i = 1;i < m;i ++){
            for(int j = 1;j < n;j ++){
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
        }
        return dp[m - 1][n - 1];
    }
}
